Программное обеспечение

Хроматэк Аналитик

Сборка 4.0

Руководство пользователя

214.00045-51И

Интеграция по REST API
Экспорт данных в LIMS

Редакция 07.12.2023

ЛХроматэк Аналитик 4 – Интеграция по REST API, экспорт в LIMS

Редакция 07.12.2023

1 Введение

Данное руководство предназначено для разработчиков стороннего программного обеспечения, которые желают взаимодействовать с ПО "Хроматэк Аналитик 4" с помощью REST API.

API (Application Programming Interface – программный интерфейс приложения) – это набор способов и правил, по которым различные программы общаются между собой и обмениваются данными.

REST API – это архитектурный подход, который устанавливает ограничения для API: как они должны быть устроены и какие функции поддерживать. Это позволяет стандартизировать работу программных интерфейсов, сделать их более удобными и производительными.

Слово REST – акроним от Representational State Transfer, что переводится на русский как "передача состояния представления", "передача репрезентативного состояния" или "передача самоописываемого состояния".

В "Хроматэк Аналитик 4" с помощью REST API вы можете:

  • Получить список соединений.

  • Получить список инструментальных методов, передавать методы в хроматограф.

  • Запустить и остановить последовательность анализов (план).

  • Получить результаты измерений (последние или в заданном интервале времени).

Во всех запросах в данном документе переменной {{host}} обозначен базовый URL сервера "Хроматэк Аналитик".

Например:

http://192.168.0.243

 

2 Управление хроматографом

2.1 Авторизация

2.1.1 Получение основных токенов

Для управления хроматографами по API нужно выполнить авторизацию и получить авторизационный токен, который будет в дальнейшем передаваться в заголовках POST-запросов.

В теле POST-запроса нужно передать объект с логином и паролем администратора (см. код ниже). Запрос выполняется к конечной точке:

POST {{host}}/api/auth/v1/login
{
  "login": "admin",
  "password": "admin"
}

Здесь указаны логин и пароль, установленные по умолчанию. В вашем случае они могут быть другие, если вы их меняли.

Ответ – объект следующей структуры:

{
  "userId": "admin",
  "roleId": "admin",
  "permissions": [
    "admin",
    "all_data_access",
    "modify_connections",
    "modify_projects",
    "update_firmware",
    "modify_config",
    "modify_sequence",
    "modify_method_instr",
    "modify_method_proc",
    "change_passport_values",
    "change_passport_keys",
    "change_shewhart_data",
    "modify_channels",
    "manual_markup",
    "modify_chrom_method",
    "modify_retention",
    "delete_data"
  ]
}

Данный объект нас не интересует. Необходимые данные нужно извлечь из заголовков ответа.

Заголовок Authorization содержит искомое значение {{Access-Token}}. Время его жизни – 5 минут.

Так же нужно получить значение заголовка Refresh-Token. Время его жизни – 1 месяц.

{{Access-Token}} нужно регулярно обновлять.

Здесь и далее параметры в скобках {{}} указывают, что это значения заголовков.

Пример {{Access-Token}}

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiJhZG1pbiIsInJvbGVJZCI6ImFkbWluIiwicGVybWlzc2lvbnMiOl
siYWRtaW4iLCJhbGxfZGF0YV9hY2Nlc3MiLCJtb2RpZnlfY29ubmVjdGlvbnMiLCJtb2RpZnlfcHJvamVjdHMiLCJ1cGRhdGVfZmlyb
XdhcmUiLCJtb2RpZnlfY29uZmlnIiwibW9kaWZ5X3NlcXVlbmNlIiwibW9kaWZ5X21ldGhvZF9pbnN0ciIsIm1vZGlmeV9tZXRob2Rf
cHJvYyIsImNoYW5nZV9wYXNzcG9ydF92YWx1ZXMiLCJjaGFuZ2VfcGFzc3BvcnRfa2V5cyIsImNoYW5nZV9zaGV3aGFydF9kYXRhIiw
W9kaWZ5X2NoYW5uZWxzIiwibWFudWFsX21hcmt1cCIsIm1vZGlmeV9jaHJvbV9tZXRob2QiLCJtb2RpZnlfcmV0ZW50aW9uIiwiZGVZ
RlX2RhdGEiXSwibG9naW5JZCI6IlpUeVEtLWgwU05pcV96cklwYkxrUEEiLCJkZXZpY2UiOiIxOTIuMTY4LjAuODMiLCJleHAiOjEMD
yMjExODUsIm5iZiI6MTcwMDIyMDg4NX0.jZgl68Ob1jN4fOwiZv2CziJYpq5PU_18-gcLyhLK2QQ

Пример {{Refresh-Token}}

ZTyQ--h0SNiq_zrIpbLkPA.4K8T9aVNRCKT7okE2XL78g.gYD8vgcwTXKYkn4JWSAd6R9vVQhtSoWaSjqebwgyDBg

 

2.1.2 Получение токена для сервиса управления приборами

Далее следует получить ещё один токен запросом к конечной точке:

POST {{host_auth}}/api/auth/v1/access
Authorization: {{Access_Token}}

Здесь {{Access-Token}} в заголовке запроса получен на предыдущем этапе.

В ответе извлеките из заголовка Refresh-Token значение {{Refresh-Token-Instrument}}.

Это специальный токен для сервиса управления приборами. Обратите внимание, он тоже извлекается из заголовка Refresh-Token, но это не то же самое, что {{Refresh-Token}}, полученный на предыдущем этапе.

Таким образом вы получите три токена:

  • {{Access-Token}}

  • {{Refresh-Token}}

  • {{Refresh-Token-Instrument}}

Последний потребуется нам один раз, при подключении к прибору.

 

2.1.3 Обновление токенов

Как уже было сказано, {{Access-Token}} живёт 5 минут и его нужно регулярно обновлять.

Не рекомендуется каждый раз получать {{Access-Token}} и {{Refresh-Token}} запросом к конечной точке /login, поскольку в этом случае всегда передаются в открытом виде логин и пароль, а также увеличивает базу хранимых {{Refresh-Token}}.

Для обновления {{Access-Token}} используйте POST-запрос к конечной точке /refresh с полученным долгоживущим {{Refresh-Token}} в заголовке.

POST {{host}}/api/auth/v1/refresh
Refresh-Token: {{Refresh-Token}}

В ответе снова извлеките значение {{Access-Token}} из заголовка Authorization, а также новое значение {{Refresh-Token}} из заголовка Refresh-Token.

Далее следует выполнить POST-запрос с конечной точке /confirm:

POST {{host}}/api/auth/v1/confirm
Refresh-Token: {{Refresh-Token}}

Этот запрос уничтожит предыдущий Refresh-Token. Актуальным станет новый.

 

 

2.2 Получение списка соединений

Запрос выполняется к конечной точке:

GET {{host}}/api/p4/v1/5000/profileManager/profiles

Пример:
https://a4.chromatec.ru/api/p4/v1/5000/profileManager/profiles

Ответ – объект следующей структуры:

[
  {
    "id": "fb273a5767a04e4cbd59197d492702a3",
    "name": "2052411",
    "startChannelsCount": 1,
    "autoRun": false,
    "diagnosticStorageTime": 15,
    "instruments": [
      {
        "pluginId": "PM3",
        "name": "ПМ3",
        "instrumentSettings": null,
        "connectionSettings": "",
        "connectionParameters": {
          "connectionType": 0,
          "port": 2010,
          "address": 1531816128,
          "comPort": 0,
          "msdAddress": 0,
          "msdPort": 0,
          "isMsdOn": false,
          "serial": null,
          "deviceType": 0,
          "pluginId": "",
          "serialPortBaudRate": 0,
          "localEndpoint": null,
          "isConnected": false,
          "isUnreacheable": false,
          "cts": false
        },
        "startChannel": 0,
        "isActive": true,
        "id": "837a1d7e-4f99-c76d-f646-5ecd63027a3e",
        "index": 1,
        "serialNumber": "2052411",
        "version": "v 03.21.17.759"
      },
      .....
    ],
    "sessions": [
      {
        "id": "fa4c6ebadaf445019bada3aeaa21e4c7",
        "name": null,
        "startChannel": 0,
        "project": null,
        "method": null,
        "synchronizeTime": false,
        "analysisTime": 0,
        "channelsSettings": null,
        "isDynamic": false
      }
    ],
    "method": null,
    "autoLoadMethod": false,
    "autoSaveDiagnosticsLog": false,
    "remoteAddress": null,
    "remotePort": 0,
    "isConnected": false,
    "userId": "a.demakov"
  },
  .....
]

Для дальнейшей работы потребуется извлечь из этого массива для каждого соединения его id – уникальный идентификатор.

 

2.3 Подключение к прибору

Обновите {{Access-Token}} и {{Refresh-Token}}

Далее выполните запрос:

POST {{host}}/api/p4/v1/5000/profileManager/connect?profileId={{id}}&token={{Refresh-Token-Instrument}}
Authorization: {{Access-Token}}

Если время жизни какого-либо токена истекло, вы получите сообщение:

Bad token

Если подключение успешно, он вернет ответ с HTTP-статусом 200 OK, а также ваш адрес локального сервера приборов, к которому вы подключились.

Например, http://192.168.0.83:5002

Во всех последующих запросах по управлению хроматографом в качестве хоста следует подставлять адрес локального сервера. Он будет описываться, как переменная {{local}}.

 

2.4 Инструментальный метод

2.4.1 Получение инструментальных методов

Обновите {{Access-Token}} и {{Refresh-Token}}

Далее выполните запрос:

GET{{local}}/aggregatorRest/instrumentMethods
Authorization: {{Access-Token}}

В ответе вы получите массив названий методов. Например:

[
  "test_instr_method"
]

 

2.4.2 Загрузка инструментального метода

Обновите {{Access-Token}} и {{Refresh-Token}}

Далее выполните запрос:

POST{{local}}/aggregatorRest/loadMethod?methodName={{methodName}}
Authorization: {{Access-Token}}

{{methodName}} – имя метода, который вы хотите загрузить.

Ответ:

true

 

2.4.3 Сохранение инструментального метода

Обновите {{Access-Token}} и {{Refresh-Token}}

Далее выполните запрос:

POST{{local}}/aggregatorRest/saveMethod?methodName={{methodName}}
Authorization: {{Access-Token}}

{{methodName}} – имя метода, который вы хотите сохранить.

Ответ:

true

 

2.4.4 Получение каналов старта

POST{{local}}/aggregatorRest/getStartChannels
Authorization: {{Access-Token}}

В ответе вы получите массив данных по каналам старта и текущее состояние каналов (этап и время):

[
  {
    "stage": 4,
    "time": 4.583333333333333,
    "analysisTime": 300,
    "number": 1
  }
]

Этапы хроматографа (параметр "stage"):

0. Нулевой 5. Подготовка к продувке 10. Фатальная авария
1. Подготовка 6. Продувка 11. Запуск метода
2. Ожидание 7. Экономия 12. Старт анализа
3. Поджиг 8. Охлаждение 13. Ожидание периферии
4. Готовность 9. Анализ

 

2.4.5 Получение списка параметров инструментального метода

Обновите {{Access-Token}} и {{Refresh-Token}}

GET{{local}}/aggregatorRest/params?deviceContext={{deviceContext}}&paramContext={{paramContext}}
Authorization: {{Access-Token}}
{{deviceContext}} – контекст устройства {{paramContext}} – контекст параметра
Битовая маска, позволяющая отфильтровать список получаемых параметров по категории устройства Битовая маска, позволяющая отфильтровать список получаемых параметров по категории параметра
0x0001 Параметры неизвестного устройства 0x0001 Параметры без категории
0x0002 Параметры хроматографа 0x0002 Параметры конфигурации
0x0004 Параметры газового и силового модуля 0x0004 Экспертные параметры конфигурации
0x0008 Параметры канала старта 0x0008 Параметры состояния
0x0010 Параметры термостатов 0x0010 Параметры информации (версии прошивки)
0x0020 Параметры дозаторов 0x0020 Параметры сеанса (записываемые сигналы)
0x0040 Параметры переходной линии 0x0040 Параметры диагностики
0x0080 Параметры насосов 0x0080 Сообщения
0x0100 Параметры кранов 0x0100 Параметры метода инструмента
0x0200 Параметры клапанов 0x0200 Параметры поджига
0x0400 Параметры портов ввода 0x0400 Параметры охлаждения
0x0800 Параметры колонок 0x0800 Группируемые параметры
0x1000 Параметры термостата колонок 0x1000 Параметры продувки
0x2000 Параметры газовых регуляторов 0x2000 Сообщения об аварии
0x4000 Параметры вспомогательных газовых регуляторов и измерителей 0xFFFF Все параметры
0x8000 Параметры метанатора
0x10000 Параметры детекторов
0x20000 Параметры внешних детекторов
0x40000 Параметры вспомогательных устройств
0xFFFFF Параметры всех устройств

В ответе возвращается массив объектов:

[
  {
    "name": "AdditionalChannel1",
    "deviceName": "Силовой модуль",
    "instrumentName": "ПМ2",
    "id": "AdditionalChannel1",
    "deviceId": "TemperatureModule",
    "instrumentId": "3a0c2230-babd-500c-8005-056e1556463d",
    "instrumentIndex": 1,
    "deviceNumber": 1,
    "wrong": false,
    "measured": 15.0141,
    "controlled": null,
    "assigned": null,
    "progNames": null,
    "enumNames": null,
    "orderNumber": 0,
    "paramCategory": 1,
    "deviceCategory": 1,
    "type": "",
    "group": null,
    "range": null,
    "range1": null,
    "range2": null,
    "comment": null,
    "deviceComment": null,
    "allowableValue": null,
    "device": {
      "isOutOfNorm": false,
      "comment": null,
      "name": "Силовой модуль",
      "id": "TemperatureModule",
      "number": 1,
      "isNotConnected": false
    }
  },
  .....
]

 

2.4.6 Обновление параметра инструментального метода

Обновите {{Access-Token}} и {{Refresh-Token}}

PATCH{{local}}/aggregatorRest/setParam
Authorization: {{Access-Token}}
{
   "name": "AdditionalChannel2",
    "deviceName": "Силовой модуль",
    "instrumentName": "ПМ2",
    "id": "AdditionalChannel1",
    "deviceId": "TemperatureModule",
    "instrumentId": "3a0c2230-babd-500c-8005-056e1556463d",
    "instrumentIndex": 1,
    "deviceNumber": 1,
    "wrong": false,
    "measured": 15.014,
    "controlled": null,
    "assigned": null,
    "progNames": null,
    "enumNames": null,
    "orderNumber": 0,
    "paramCategory": 1,
    "deviceCategory": 1,
    "type": "",
    "group": null,
    "range": null,
    "range1": null,
    "range2": null,
    "comment": null,
    "deviceComment": null,
    "allowableValue": null,
    "device": {
        "isOutOfNorm": false,
        "comment": null,
        "name": "Силовой модуль",
        "id": "TemperatureModule",
        "number": 1,
        "isNotConnected": false
    }
}

Чтобы вызвать этот метод, вы должны передать объект {{paramContext}} и {{deviceContext}} в теле запроса. Это один из объектов массива, полученного на предыдущем этапе.

 

2.4.7 Запуск инструментального метода

Обновите {{Access-Token}} и {{Refresh-Token}}

Далее выполните запрос:

POST{{local}}/aggregatorRest/runMethod?method
Authorization: {{Access-Token}}
Content-Type: application/json
{
  "startChannel": 2
}

{{methodName}} – имя метода, который вы хотите сохранить.

В теле запроса передаётся JSON с номером канала старта.

Если передать канал старта = 0, то метод будет применён для всех каналов.

Если вы неправильно указали канал старта, или такого канала не существует, то выдаст ошибку "No ActiveAggregator".

 

 

2.5 Планировщик задач

2.5.1 Запуск Планировщика

Обновите {{Access-Token}} и {{Refresh-Token}}

Далее выполните запрос:

POST{{local}}/scheduler/start
Authorization: {{Access-Token}}

 

2.5.2 Остановка Планировщика

Обновите {{Access-Token}} и {{Refresh-Token}}

Далее выполните запрос:

POST{{local}}/scheduler/stop
Authorization: {{Access-Token}}

 

2.5.3 Получение списка сохраненных планов для Планировщика

Обновите {{Access-Token}} и {{Refresh-Token}}

Далее выполните запрос:

GET{{local}}/scheduler/plans
Authorization: {{Access-Token}}

Ответ:

[
  "",
  "exmapleName"
]

 

2.5.4 Сохранение текущего метода для Планировщика

Обновите {{Access-Token}} и {{Refresh-Token}}

Далее выполните запрос:

POST{{local}}/scheduler/save?name={{methodName}}
Authorization: {{Access-Token}}

{{methodName}} – имя метода, который вы хотите сохранить.

 

2.5.5 Загрузка текущего метода для Планировщика

Обновите {{Access-Token}} и {{Refresh-Token}}

Далее выполните запрос:

POST{{local}}/scheduler/load?name={{methodName}}
Authorization: {{Access-Token}}

{{methodName}} – имя метода, который вы хотите загрузить

 

 

 

3 Получение результатов измерений

3.1 LIMS (ЛИУС)

Одна из задач интеграции "Хроматэк Аналитик 4" со сторонним программным обеспечением – экспорт результатов измерений в LIMS (ЛИУС).

LIMS – Laboratory Information Management System – Лабораторная информационно-управляющая система – ЛИУС, ЛИС.

LIMS – это специальное программное обеспечение, предназначенное для управления лабораторными потоками работ и документов. Оно оптимизирует сбор, анализ, возврат и отчетность лабораторных данных. Часто применяется в фармацевтической и пищевой промышленности.

Назначением LIMS является получение достоверной информации по результатам испытаний и оптимизации управления этой информацией с целью её использования для принятия корректных своевременных управленческих решений.

Как соотносятся LIMS и "Хроматэк Аналитик"?

Хроматограф служит одним из источников информации о производимых продуктах или протекающих на производстве процессах, наряду с другим аналитическим оборудованием и прочими поставщиками информации, необходимой для управления качеством продукции.

"Хроматэк Аналитик" передает в LIMS результаты хроматографического анализа, а также специальных расчётов по некоторым нормативным документам.

Какие LIMS поддерживает "Хроматэк Аналитик"?

"Хроматэк Аналитик" не поддерживает какие-то конкретные виды LIMS. Более правильно утверждение, что он поддерживает любые виды LIMS, поскольку практически все они обладают гибкими настройками, позволяющими получать данные из внешних источников.

"Хроматэк Аналитик" позволяет экспортировать данные в нескольких форматах.

 

3.2 Настройка экспорта

Настройка экспорта в LIMS сводится к обычной настройке отчёта.

В основных настройках необходимо в качестве формата отчёта выбрать JSON.

Рисунок 3.1 – Выбор формата отчёта – JSON

 

3.3 Результаты измерений

LIMS может запросить результаты анализов с помощью REST API. Доступно два вида GET-запроса.

Запросы выполняются к конечной точке:

GET {{host}}/api/a4/v1/report

Например:

GET http://a4.chromatec.ru/api/a4/v1/report

 

3.3.1 Запрос последнего результата для хроматографа

Для выполнения запроса необходимо знать серийный номер хроматографа. Он указывается в качестве параметра serial_number:

GET {{host}}/api/a4/v1/report?serial_number=123456

Ответ – массив объектов ExportData:

class ExportData {
  id: string;
  name: string;
  tables: ExportTable[];
}
class ExportTable {
  id: string;
  name: string;
  params: ExportParam[];
}
class ExportParam {
  key: string;
  name: string;
  value: any;
}

Пример:

[
  {
    "id": "gost31371_7_2020",
    "name": "ГОСТ 31371.7-2020",
    "tables": [...]
  },
  {
    "id": "gost3169_2021",
    "name": "ГОСТ 31369-2021",
    "tables": [...]
  },
  {
    "id": "gost57975_1_2017",
    "name": "ГОСТ 57975.1-2017",
    "tables": [...]
  },
]

 

3.3.2 Запрос нескольких результатов

Вы можете запросить сразу несколько результатов.

Для этого в качестве параметра нужно передать имя проекта и (опционально) даты начала и окончания интересующего интервала времени.

Параметры:

project Имя проекта
from_time Начало интервала времени (необязательный параметр)
to_time Окончание интервала времени (необязательный параметр)

Например, для проекта "ГОСТ 31371" мы хотим получить отчёты за период от 2023-08-08 10:00:00 до 2023-08-08 11:00:00:

GET {{host}}/api/a4/v1/report?project=ГОСТ 31371&from_time=2023-08-08 10:00:00&to_time=2023-08-08 12:00:00

Ответ – массив следующей структуры:

interface IExportResults {
  path: string;
  dateCreation: Date;
  results: ExportData[];
}

См. класс ExportData.

Пример:

[
  {
    "path": "C:\\Source\\analytic4\\data\\reports\\analytic\\ГОСТ 31371\\2023-08-08 10-23-17 1,2,3.json",
    "dateCreation": "2023-08-08T08:13:18.251Z",
    "results": [
      {
        "id": "gost31371_7_2020",
        "name": "ГОСТ 31371.7-2020",
        "tables": [...]
       },
       {
         "id": "gost3169_2021",
         "name": "ГОСТ 31369-2021",
         "tables": [...]
       },
    ]
  },
  .....
]

 

3.3.3 Обработка полученных данных

Как можно видеть из вышеприведённого описания, результат экспорта представляет собой массив объектов, каждый из которых имеет уникальное значение свойства "id".

Свойство "name" содержит локализованное название расчёта.

Значение свойства "tables" – массив таблиц, каждая из которых имеет уникальное значение идентификатора "id" и массив параметров.

У каждого параметра свойство "name" может содержать имя компонента, или дополнительный идентификатор, см. рисунок ниже.

Например, чтобы из массива gas_composition получить концентрации всех компонентов, нужно выбрать все элементы, у которых key == conc.

Чтобы найти все параметры метана, нужно из массива gas_composition получить все элементы, у которых name == метан.

И т.п.

Параметры различных расчётов перечислены в следующем разделе.

Рисунок 3.2 – Принцип формирования объекта ExportParam

 

 

3.4 Параметры расчётов

3.4.1 Расчёт по ГОСТ 31369-2021

{
  "id": "gost31369_2021",
  "name": "ГОСТ 31369-2021",
  "tables": [...]
}

Входные нормализованные данные

{
  "id": "normalized_conc",
  "name": "Входные нормализованные доли",
  "params": [{
      "key": "units.molar_percent",
      "name": "этан",
      "value": 21.389341056409574
    },
    .....
  ]
}

Значение параметра "name" – название компонента.

Возможные значения параметра "key":

Значение Тип данных Описание
molar_percent number Молярная доля, %
mass_percent number Массовая доля, %
volume_percent number Объёмная доля, %
molar_uncert number Стандартная неопределённость молярной доли, %
molar_uncert_ext number Расширенная неопределённость молярной доли, %

Физико-химические показатели идеального газа

{
  "id": "ideal_gas",
  "name": "Физико-химические показатели идеального газа",
  "params": [
    {
      "key": "physical_parameter_value",
      "name": "molar_mass@g/mol",
      "value": 38.76
    },
    .....
  ]
}

Возможные значения параметров:

key Тип name Описание

physical_parameter_value

physical_parameter_uncert_ext

Значение

Неопределённость

number number molar_mass@g/mol Молярная масса, г/моль

physical_parameter_value

physical_parameter_uncert_ext

Значение

Неопределённость

number number compress_factor Фактор сжимаемости

physical_parameter_value

physical_parameter_uncert_ext

Значение

Неопределённость

number number high_combustion_heat_molar@kJ/mol Молярная теплота сгорания высшая, кДж/моль

physical_parameter_value

physical_parameter_uncert_ext

Значение

Неопределённость

number number low_combustion_heat_molar@kJ/mol Молярная теплота сгорания низшая, кДж/моль

physical_parameter_value

physical_parameter_uncert_ext

Значение

Неопределённость

number number high_combustion_heat_mass@MJ/kg Массовая теплота сгорания высшая, МДж/кг

physical_parameter_value

physical_parameter_uncert_ext

Значение

Неопределённость

number number low_combustion_heat_mass@MJ/kg Массовая теплота сгорания низшая, МДж/кг

physical_parameter_value

physical_parameter_uncert_ext

Значение

Неопределённость

number number high_combustion_heat_volume@MJ/m3 Объёмная теплота сгорания высшая, МДж/м³

physical_parameter_value

physical_parameter_uncert_ext

Значение

Неопределённость

number number low_combustion_heat_volume@MJ/m3 Объёмная теплота сгорания низшая, МДж/м³

physical_parameter_value

physical_parameter_uncert_ext

Значение

Неопределённость

number number density_abs@kg/m3 Плотность, кг/м³

physical_parameter_value

physical_parameter_uncert_ext

Значение

Неопределённость

number number density_rel Плотность относительная

physical_parameter_value

physical_parameter_uncert_ext

Значение

Неопределённость

number number high_wobbe@MJ/m3 Число Воббе высшее, МДж/м³

physical_parameter_value

physical_parameter_uncert_ext

Значение

Неопределённость

number number low_wobbe@MJ/m3 Число Воббе низшее, МДж/м³

Физико-химические показатели реального газа

"id": "ideal_gas",

В остальном структура аналогична идеальному газу.

 

3.4.2 Расчёт по ГОСТ 31371.7-2020

{
  "id": "gost31371_7_2020",
  "name": "ГОСТ 31371.7-2020",
  "tables": [...]
}

Входные ненормализованные доли

{
  "id": "input_unnormalized_concentrations",
  "name": "Входные ненормализованные доли, мол.%",
  "params": [
    {
      "key": "#4",
      "name": "этан",
      "value": 0.007505432770666584
    },
    .....
  ]
}

Значение параметра "name" – название компонента.

Возможные значения параметра "key":

Значение Тип данных Описание
#<номер хроматограммы> number Молярная доля, %
range_mol number Размах, мол. %
range_mol_norm number Норматив размаха, мол. %
acceptability boolean Приемлемость

Таблица градуировочных зависимостей

{
  "id": "calibration_functions_ab",
  "name": "Таблица градуировочных зависимостей",
  "params": [
    {
      "key": "calibration_function",
      "name": "этан",
      "value": "X = (2.1808e-4) * A / q"
    },
    .....
  ]
}

Приемлемость градуировочных коэффициентов

{
  "id": "calibration_factors_acceptability",
  "name": "Приемлемость градуировочных коэффициентов",
  "params": [
    {
      "key": "#1",
      "name": "этан",
      "value": 0.0002180760478864956
    },
    .....
  ]
}

Значение параметра "name" – название компонента.

Возможные значения параметра "key":

Значение Тип данных Описание
#<номер хроматограммы> number Градуировочный коэффициент
average number Средний градуировочный коэффициент
calibration_factor_range number Размах градуировочных коэффициентов, отн. %
normative number Норматив, отн.%
acceptability boolean Приемлемость

Проверка соответствия ГСО и пробы

{
  "id": "standard_and_sample_compliance",
  "name": "Проверка соответствия ГСО и пробы",
  "params": [
    {
      "key": "conc_not_normalized",
      "name": "этан",
      "value": 4.663504906873109
    },
    .....
  ]
}

Значение параметра "name" – название компонента.

Возможные значения параметра "key":

Значение Тип данных Описание
conc_not_normalized number Ненормализованная доля, мол. %
min number Минимум допустимого диапазона градуировочного СО, мол.%
max number Максимум допустимого диапазона градуировочного СО, мол.%
standard_conc number Паспортное значение молярной доли СО, %
acceptability boolean Приемлемость

Нормализованный состав пробы

{
  "id": "gas_composition",
  "name": "Нормализованный состав пробы",
  "params": [
    {
      "key": "conc",
      "name": "этан",
      "value": 21.4
    },
    .....
  ]
}

Значение параметра "name" – название компонента.

Возможные значения параметра "key":

Значение Тип данных Описание
conc number Нормализованная доля, мол. %
uncertainty_mol_ext number Расширенная неопределённость, мол.%
analysis_method number Метод анализа